﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sispe.Entities;
using System.Data.Objects;
using Microsoft.Practices.Unity;

namespace Sispe.Repository
{
    public class HojaDeRecorridoRepository : MasterRepository, IHojaDeRecorridoRepository
    {

        //true = 3
        //false = 9
        public List<HOJA_FIN_RECORRIDO_LIQUIDACIONES> GetAllFromHojaRecorrido(bool aprobado, string criterio)
        {
            if (criterio != null && criterio != string.Empty && criterio != "")
            {
                if (aprobado)
                {
                    var query = from p in context.HOJA_FIN_RECORRIDO_LIQUIDACIONES.Include("LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA")
                                where p.OP_VistoBueno == false && 
                                (p.LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA.Nombres.ToUpper().Contains(criterio.ToUpper())
                                || p.LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA.ApePaterno.ToUpper().Contains(criterio.ToUpper())
                                || p.LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA.ApeMaterno.ToUpper().Contains(criterio.ToUpper())
                                )
                                select p;
                    return query.ToList();
                }
                else
                {
                    var query = from p in context.HOJA_FIN_RECORRIDO_LIQUIDACIONES.Include("LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA")
                                where p.ADGRAL_VistoBueno == false &&
                                (p.LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA.Nombres.ToUpper().Contains(criterio.ToUpper())
                                || p.LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA.ApePaterno.ToUpper().Contains(criterio.ToUpper())
                                || p.LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA.ApeMaterno.ToUpper().Contains(criterio.ToUpper())
                                )
                                select p;
                    return query.ToList();
                }
            }
            else
            {
                if (aprobado)
                {
                    var query = from p in context.HOJA_FIN_RECORRIDO_LIQUIDACIONES.Include("LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA")
                                where p.OP_VistoBueno == false
                                select p;
                    return query.ToList();
                }
                else
                {
                    var query = from p in context.HOJA_FIN_RECORRIDO_LIQUIDACIONES.Include("LIQUIDACION.CONTRATO.TRABAJADOR.PERSONA")
                                where p.ADGRAL_VistoBueno == false
                                select p;
                    return query.ToList();
                }
            }
        }

        public USUARIO GetUserByDniTrabajador(string dni)
        {
            var query = from p in context.USUARIOs.Include("TRABAJADOR.PERSONA")
                        where p.TRABAJADOR.PERSONA.Dni.Equals(dni)
                        select p;

            return query.FirstOrDefault();
        }


        public void AprobarArea(HOJA_FIN_RECORRIDO_LIQUIDACIONES liquidacion)
        {
            liquidacion.HOJA_RECORRIDO_OPERACIONES = null;
            liquidacion.LIQUIDACION = null;

            context.Entry(liquidacion).State = System.Data.EntityState.Modified;
            context.SaveChanges();
        }


        public HOJA_FIN_RECORRIDO_LIQUIDACIONES GetHojaFinRecorridoLiquidacionById(int liquidacionId)
        {
            var query = from c in context.HOJA_FIN_RECORRIDO_LIQUIDACIONES
                        where c.IdLiquidacion.Equals(liquidacionId)
                        select c;
            return query.FirstOrDefault();
        }


    }
}
